package fr.ginvest.implementation;

import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import fr.ginvest.entity.GroupeInvestisseur;
import fr.ginvest.entity.Investisseur;
import fr.ginvest.interfaces.GroupeInvestisseurFacadeRemote;

/**
 * Session Bean implementation class GroupeInvestisseurFacade
 */
@Stateless
public class GroupeInvestisseurFacade implements GroupeInvestisseurFacadeRemote {

	@PersistenceContext
	protected EntityManager entityMgr;
	public GroupeInvestisseurFacade() {
	}	

	public GroupeInvestisseurFacade(EntityManager entityMgr) {
		this.entityMgr = entityMgr;
	}

	
    public GroupeInvestisseur findGroupeInvestisseurById(int id) {
        return entityMgr.find(GroupeInvestisseur.class, id);
    }
    
    public void deleteGroupeInvestisseur(GroupeInvestisseur g) {
    	g = entityMgr.getReference(GroupeInvestisseur.class, g.getId());
		entityMgr.remove(g);
    }
    
    public GroupeInvestisseur updateGroupeInvestisseur(GroupeInvestisseur g) {
    	return entityMgr.merge(g);
    }
    
    public GroupeInvestisseur addGroupeInvestisseur(GroupeInvestisseur g) {
    	entityMgr.persist(g);
		return g;
    }

	@SuppressWarnings("unchecked")
	@Override
	public Collection<GroupeInvestisseur> findAll() {
		String queryString = "select model from GroupeInvestisseur model";
		Query query = entityMgr.createQuery(queryString);
		return query.getResultList();
	}
	
	@SuppressWarnings("unchecked")
	public Collection<Investisseur> getMembres(GroupeInvestisseur groupe) {
		final String queryString = "select model1 from Investisseur model1, GroupeInvestisseurAssociation model WHERE model.groupe_id = " + 
		groupe.getId() + " AND model1.id = model.investisseur_id";
		Query query = entityMgr.createQuery(queryString);
		return query.getResultList();
	}

	@Override
	public GroupeInvestisseur findGroupeInvestisseurByNom(String nom) {
		final String queryString = "select grp from GroupeInvestisseur grp where grp.nomGroupe= :nom";
		Query query = entityMgr.createQuery(queryString).setParameter("nom", nom);
		if(query.getResultList().size() == 0)
			return null;
		else
			return (GroupeInvestisseur) query.getSingleResult();
	}
}
